iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

身為後端,資料庫也是必備技能之一,
今天來說說,如何用 Docker 在 Server 上啟動 MySQL 的服務。


MySQL Official Image

MySQL 幾乎是最常見的關聯式資料庫,在業界上也很廣泛使用,

跟 Node.Js 一樣,Docker Hub 上也有提供了官方的 Docker Image。

MySQL 版本

如果是直接在 Server 上安裝 MySQL,很容易出現的一個問題,是如果要把多個專案都跑在同一台 Server 時,不同專案間使用的 MySQL 版本可能不一樣,就會只能使用同一個版本來用,這一點在其他需要的執行環境上也會出現,像是 Node.Js 的版本,

而使用 Docker 啟動 MySQL,只要把使用的 Port 分開,就可以執行不同的版本了。

啟動指令

閱讀過 mysql docker image 的描述後,我們需要加入以下的參數:

  1. --publish (-p)
    MySQL 預設使用 Port 3306,我們把這個 Port 對外連結到 Server 的 Port 3306。
  2. --env (-e)
    MySQL 需要讀取初始的設定值,因此在啟動 Container 時帶入環境變數。
  3. --volume (-v)
    為了避免在 container 被移除後,資料庫的資料也都被一併刪除,因為我們要把資料庫的儲存路徑連結到 Server 的指定位置上。
  4. --detach (-d)
    在背景持續執行。

透過以下的指令,就能啟動 MySQL 了,

另外,在第一次剛啟動後,會有大約幾秒還無法使用,因為此時正在初始化資料庫的內容,稍等一下就可以了。

$ sudo docker run \
	--publish 3306:3306 \
	--env MYSQL_ROOT_PASSWORD=your-root-password \
	--env MYSQL_USER=default-user \
	--env MYSQL_PASSWORD=my-pw \
	--env MYSQL_DATABASE=not_so_hard \
	--volume /root/mysql:/var/lib/mysql \
	--name mysql \
	--detach \
	mysql:8

Docker Compose

在文章 D8 - Docker 玩具 — 團隊觀戰區爬蟲 中,我們使用到了 Docker Compose,

Docker Compose 可以大量簡化指令的內容,因此我們這次也加入定義檔:

services:
  mysql:
    image: mysql:8
    restart: unless-stopped
    ports:
      - "3306:3306"
    env_file:
      - .env
    volumes:
      - /root/mysql:/var/lib/mysql

其中,我們把需要的環境變數,放到了 .env 裡面,
可以參考 .env.example

MYSQL_ROOT_PASSWORD=your-root-password
MYSQL_USER=default-user
MYSQL_PASSWORD=my-pw
MYSQL_DATABASE=not_so_hard

執行 Compose 的指令,就同樣也能啟動 MySQL。

$ sudo docker compose up -d

以上的範例可以在 這裡 找到。


下次,在新專案開始建置時,或許你也可以考慮使用 Docker 來建置資料庫。


上一篇
D9 - 在 Gitlab CICD 使用 Build Cache 加速
下一篇
D11 - 團隊觀戰區爬蟲 v2
系列文
其實沒有那麼難 — Docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言